package com.coai.rtc.service

import com.coai.rtc.model.SignalingMessage
import com.coai.rtc.model.SignalingType
import org.springframework.messaging.simp.SimpMessagingTemplate
import org.springframework.stereotype.Service

/**
 * WebRTC信令服务
 */
@Service
class SignalingService(
    private val messagingTemplate: SimpMessagingTemplate
) {
    
    /**
     * 处理WebRTC Offer
     */
    fun handleOffer(message: SignalingMessage) {
        // 将Offer转发给目标用户
        message.to?.let { targetUserId ->
            sendToUser(targetUserId, message)
        }
    }
    
    /**
     * 处理WebRTC Answer
     */
    fun handleAnswer(message: SignalingMessage) {
        // 将Answer转发给发起者
        message.to?.let { targetUserId ->
            sendToUser(targetUserId, message)
        }
    }
    
    /**
     * 处理ICE候选
     */
    fun handleIceCandidate(message: SignalingMessage) {
        // 转发ICE候选给对方
        message.to?.let { targetUserId ->
            sendToUser(targetUserId, message)
        } ?: run {
            // 如果没有指定接收者，广播给通话中的所有人
            broadcastToCall(message.callId, message)
        }
    }
    
    /**
     * 发送消息给指定用户
     */
    private fun sendToUser(userId: String, message: SignalingMessage) {
        messagingTemplate.convertAndSendToUser(
            userId,
            "/queue/rtc-signal",
            message
        )
    }
    
    /**
     * 广播消息给通话中的所有参与者
     */
    private fun broadcastToCall(callId: String, message: SignalingMessage) {
        messagingTemplate.convertAndSend("/topic/call/$callId", message)
    }
}
